#include "comm.h"

int main()
{
  // 先通过ftok函数 利用pathname和proj_id来生成一个共享内存标识符key，用来标识共享内存（给OS看的）
  key_t key = ftok(PATHNAME, PROJ_ID);
  if (key == -1){
    // 标识符生成失败
    perror("ftol fail");
    exit(-1);
  }
  
   printf("key:%p\n", key);
  
  // 创建内存空间
  // IPC_CREAT 要创建的共享内存如果存在，就打开返回，不存在就创建
  // IPC_EXCL  如果底层共享内存已经存在就出错返回
  // 结合使用可以创建一个全新的共享内存
  int shmid = shmget(key, SIZE, IPC_CREAT|IPC_EXCL|0664);
  if (shmid < 0){
    perror("shmget");
    exit(-1);
  }
  printf("shmid:%d\n", shmid);
  
  // 连接共享内存(关联)
  char* str = (char*)shmat(shmid, NULL, 0); 
  //sleep(5);  

  // 服务端每隔一秒在显示器上刷新共享内存段中的数据
  while (1){
    printf("client say# %s\n", str);
    sleep(1);
  }
  // 取消关联
  if (shmdt(str) == -1){
    perror("shmdt");
    exit(-1);
  }
  
  // 删除共享内存段
  shmctl(shmid, IPC_RMID, NULL);
  return 0;
}
